home *** CD-ROM | disk | FTP | other *** search
/ The Sunday Times: The Month 2003 December / The Sunday Times - The Month 2003-12.iso / mac / The Month DEC 03 / engine / modules / text_pages.swf / scripts / frame_2 / DoAction.as
Text File  |  2003-11-04  |  5KB  |  154 lines

  1. function searchandreplace(the_string, search_string, replace_string, occurrences, backward)
  2. {
  3.    if(search_string == replace_string)
  4.    {
  5.       return the_string;
  6.    }
  7.    var found = 0;
  8.    if(backward == true)
  9.    {
  10.       var pos = the_string.lastIndexOf(search_string);
  11.       while(pos >= 0)
  12.       {
  13.          found++;
  14.          var start_string = the_string.substr(0,pos);
  15.          var end_string = the_string.substr(pos + search_string.length);
  16.          the_string = start_string + replace_string + end_string;
  17.          pos = the_string.lastIndexOf(search_string,start_string.length);
  18.          if(found == occurrences)
  19.          {
  20.             pos = -1;
  21.          }
  22.       }
  23.    }
  24.    else
  25.    {
  26.       var pos = the_string.indexOf(search_string);
  27.       while(pos >= 0)
  28.       {
  29.          found++;
  30.          var start_string = the_string.substr(0,pos);
  31.          var end_string = the_string.substr(pos + search_string.length);
  32.          the_string = start_string + replace_string + end_string;
  33.          pos = the_string.indexOf(search_string,pos + replace_string.length);
  34.          if(found == occurrences)
  35.          {
  36.             pos = -1;
  37.          }
  38.       }
  39.    }
  40.    return the_string;
  41. }
  42. function tagStack(aString)
  43. {
  44.    var error = false;
  45.    var tagArray = [];
  46.    var validTags = ["a","b","i","u","font","p"];
  47.    var tStringArray = aString.split("<");
  48.    var i = 1;
  49.    while(i < tStringArray.length)
  50.    {
  51.       var newTag = "<" + tStringArray[i].slice(0,tStringArray[i].indexOf(">") + 1);
  52.       var shortForm = newTag.indexOf(" ") <= -1 ? newTag : newTag.slice(0,newTag.indexOf(" ")) + ">";
  53.       var tagOnly = shortForm.indexOf("/") <= -1 ? shortForm.slice(1,-1) : shortForm.slice(2,-1);
  54.       isValidTag = false;
  55.       for(var j in validTags)
  56.       {
  57.          if(validTags[j] == tagOnly)
  58.          {
  59.             isValidTag = true;
  60.             break;
  61.          }
  62.       }
  63.       if(isValidTag)
  64.       {
  65.          if(newTag.charAt(1) == "/")
  66.          {
  67.             var lastTag = tagArray.pop();
  68.             lastTagShort = lastTag.indexOf(" ") <= -1 ? lastTag : lastTag.slice(0,lastTag.indexOf(" ")) + ">";
  69.             lastTagShort = lastTagShort.indexOf("/") <= -1 ? lastTagShort.slice(1,-1) : lastTagShort.slice(2,-1);
  70.             if(lastTagShort != tagOnly)
  71.             {
  72.                error = true;
  73.                trace("Error! Next closing tag should be " + lastTag + ", not " + newTag);
  74.                trace("Tag Stack ::" + tagArray + "::");
  75.                break;
  76.             }
  77.          }
  78.          else
  79.          {
  80.             tagArray.push(newTag);
  81.          }
  82.       }
  83.       i++;
  84.    }
  85.    return !error ? tagArray : -1;
  86. }
  87. function fixText(textString)
  88. {
  89.    var tempText = searchandreplace(textString,String.fromCharCode(13)," <br>");
  90.    tempText = searchandreplace(textString,"\n"," <br>");
  91.    tempText = searchandreplace(textString,"\r"," <br>");
  92.    tempText = searchandreplace(tempText,String.fromCharCode(9)," ");
  93.    var textArray = tempText.split(" ");
  94.    return textArray;
  95. }
  96. function flowText(textString, arrayOfTextFields)
  97. {
  98.    trace("flowText ( \'" + textString.substr(0,15) + "...\' , " + arrayOfTextFields + " ) ");
  99.    var textArray = fixText(textString);
  100.    var currentWordIndex = 0;
  101.    var currentFieldIndex = 0;
  102.    var maxWordIndex = textArray.length;
  103.    var timeArray = [];
  104.    var leftOverTags = "";
  105.    var i;
  106.    var lastWord = 0;
  107.    for(i in arrayOfTextFields)
  108.    {
  109.       eval(arrayOfTextFields[i]).html = false;
  110.       eval(arrayOfTextFields[i]).text = "";
  111.       eval(arrayOfTextFields[i]).htmlText = "";
  112.    }
  113.    do
  114.    {
  115.       if(currentWordIndex >= maxWordIndex)
  116.       {
  117.          return true;
  118.       }
  119.       var field = eval(arrayOfTextFields[currentFieldIndex]);
  120.       var tempString = "";
  121.       field.html = true;
  122.       if(textArray[currentWordIndex].indexOf("<br>") != -1)
  123.       {
  124.          textArray[currentWordIndex] = searchandreplace(textArray[currentWordIndex],"<br>","");
  125.       }
  126.       i = currentWordIndex;
  127.       while(i < maxWordIndex)
  128.       {
  129.          var newWord = textArray[i];
  130.          newWord = newWord != "<br>" ? newWord + " " : newWord;
  131.          tempString += newWord;
  132.          field.htmlText = "";
  133.          field.htmlText = tempString;
  134.          if(field.maxscroll > 1)
  135.          {
  136.             lastWord = i;
  137.             break;
  138.          }
  139.          i++;
  140.       }
  141.       field.htmlText = "";
  142.       var endAt = i;
  143.       field.htmlText = leftOverTags + textArray.slice(currentWordIndex,endAt).join(" ");
  144.       leftOverTags = tagStack(textArray.slice(0,endAt).join(" ")).join("");
  145.       currentWordIndex = endAt;
  146.       currentFieldIndex++;
  147.    }
  148.    while(currentFieldIndex <= arrayOfTextFields.length);
  149.    
  150.    trace("Not enough text fields to hold all the text.");
  151.    var leftOverText = textArray.slice(lastWord,textArray.length).join(" ");
  152.    return leftOverText;
  153. }
  154.